// 3 无重复字符的最长子串 3
// "abcabcbb"  最长字符串3
var lengthOfLongestSubStrings = function (s) {
    let map = new Map();
    let max = 0;
    let i = 0;
    for ( let j = 0; j < s.length; j++) {
        if (map.has(s[j])) {
            // j 记录的是数据索引
            // i 代表重复元素最新存在的位置
            i = Math.max(map.get(s[j]) + 1, i);
        }
        // max 老的最长与最新的最长比较 新值就是重复位置（当前索引 - 最近出现的位置 + 1） 中间的间隔就是长度
        max = Math.max(max, j - i + 1);
        map.set(s[j], j)
    }
    return max
}